package br.com.divulgaqui.managedbean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class PessoaFisicaManagendBean extends BaseBean {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 
	 *//*
	private static final long serialVersionUID = 2474052136647474158L;

	@EJB
	private PessoaFisicaServiceBeanLocal pessoaFisicaServiceBeanLocal;

	@EJB
	private EnderecoServiceBeanLocal enderecoServiceBeanLocal;

	@EJB
	private TelefoneServiceBeanLocal telefoneServiceBeanLocal;

	private PessoaFisica pessoaFisica = new PessoaFisica();
	private String tipoPessoa;
	private Telefone telefone = new Telefone();
	private Endereco endereco = new Endereco();
	private List<Endereco> enderecos = new ArrayList<Endereco>();
	private List<Telefone> telefones = new ArrayList<Telefone>();

	*//**
	 * Método salva um objeto {@link PessoaFisica} no banco de dados juntamente
	 * com os objetos {@link List}<{@link Telefone}> e {@link List}<
	 * {@link Endereco}>
	 * 
	 * @return {@link PageFactory}.CADASTROPESSOA
	 *//*
	public String salvarPessoa() {
		if (!Util.isEmpty(getTelefone().getNumero())) {
			addTelefone();//adiciona o telefone não adicionado a lista pelo usuário
		}
		if (!Util.isEmpty(getEndereco().getLogradouro())
				&& !Util.isEmpty(getEndereco().getNumero())
				&& !Util.isEmpty(getEndereco().getBairro())
				&& !Util.isEmpty(getEndereco().getUf())
				&& !Util.isEmpty(getEndereco().getCidade())
				&& !Util.isEmpty(getEndereco().getCep())
			) {
			addEndereco(); // adiciona o endereço não adicionado a lista pelo usuário
		}
		
		salvarPessoaFsica(pessoaFisica);
		pessoaFisica = pessoaFisicaServiceBeanLocal.listar(pessoaFisica).iterator().next();
		salvarEnderecos(enderecos, pessoaFisica);
		salvarTelefones(telefones, pessoaFisica);
		return PageFactory.CADASTROPESSOA;
	}
	
	*//**
	 * Trata e persiste {@link List}<{@link Endereco}>
	 * @param {@link List}<{@link Endereco}> enderecos
	 * @param {@link PessoaFisica} pessoaFisica
	 *//*
	public void salvarEnderecos(List<Endereco> enderecos, PessoaFisica pessoaFisica) {
		for (Endereco endereco : enderecos) {
			endereco.setPessoa(pessoaFisica);
			enderecoServiceBeanLocal.salvar(endereco);
		}
	}
	
	*//**
	 * Trata de persiste uma {@link List}<{@link Telefone}>
	 * @param {@link List}<{@link Telefone}> telefones
	 * @param {@link PessoaFisica} pessoaFisica
	 *//*
	public void salvarTelefones(List<Telefone> telefones, PessoaFisica pessoaFisica){
		for (Telefone telefone : telefones) {
			telefone.setPessoa(pessoaFisica);
			telefone.setCodigoPais("55");
			telefone.setCodigoEstado(telefone.getNumero().substring(0, 2));
			telefone.setNumero(telefone.getNumero().substring(3,telefone.getNumero().length()).replaceAll("-", ""));
			telefoneServiceBeanLocal.salvar(telefone);
		}
	}
	*//**
	 * Trata e persiste os dados da {@link PessoaFisica}
	 * @param {@link PessoaFisica} pessoaFisicaBean
	 *//*
	public void salvarPessoaFsica(PessoaFisica pessoaFisicaBean) {
		try {
			pessoaFisica.setEmail(pessoaFisica.getEmail().replaceAll("-", ""));
			pessoaFisica.setCpf(pessoaFisica.getCpf().replaceAll("-", ""));
			pessoaFisicaServiceBeanLocal.salvar(pessoaFisica);
			System.out.println(pessoaFisica);
		} catch (EmailIgualException e) {
			// TODO: Colocar msg no propeties
			addMensagem(FacesMessage.SEVERITY_ERROR, "Erro Email: E-mail já cadastrado", "E-mail já cadastrado");
		} catch (CPFIgualException e) {
			addMensagem(FacesMessage.SEVERITY_ERROR, "Erro CPF: CPF já cadastrado", "CPF já cadastrado");
			// TODO Colocar msg no propeties
		}
	}
	*//**
	 * @return {@link PessoaFisica} pessoaFisica
	 *//*
	public PessoaFisica getPessoaFisica() {
		return pessoaFisica;
	}
	
	*//**
	 * set the {@link PessoaFisica}
	 * @param pessoaFisica
	 *//*
	public void setPessoaFisica(PessoaFisica pessoaFisica) {
		this.pessoaFisica = pessoaFisica;
	}

	*//**
	 * @return the tipoPessoa
	 *//*
	public String getTipoPessoa() {
		return tipoPessoa;
	}

	*//**
	 * @param tipoPessoa
	 * the tipoPessoa to set
	 *//*
	public void setTipoPessoa(String tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
	}

	*//**
	 * Adiciona telefone a lista de {@link PessoaFisica}
	 * 
	 * @return
	 *//*
	public String addTelefone() {
		telefones.add(telefone);
		telefone = new Telefone();

		return PageFactory.CADASTROPESSOA;
	}

	*//**
	 * Adiciona endereço na lista de {@link PessoaFisica}
	 * 
	 * @return {@link PageFactory}.CADASTROPESSOA
	 *//*
	public String addEndereco() {
		enderecos.add(endereco);
		endereco = new Endereco();
		return PageFactory.CADASTROPESSOA;
	}

	*//**
	 * @return the telefone
	 *//*
	public Telefone getTelefone() {
		return telefone;
	}

	*//**
	 * @param telefone
	 * the telefone to set
	 *//*
	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}

	*//**
	 * @return the endereco
	 *//*
	public Endereco getEndereco() {
		return endereco;
	}

	*//**
	 * @param endereco
	 * the endereco to set
	 *//*
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}
	
	*//**
	 * @return the enderecos
	 *//*
	public List<Endereco> getEnderecos() {
		if (Util.isEmpty(pessoaFisica.getId())) {
			return enderecos;
		}
		else {
			//return pessoaFisica.getEnderecos();
		}
	}

	*//**
	 * @param enderecos the enderecos to set
	 *//*
	public void setEnderecos(List<Endereco> enderecos) {
		this.enderecos = enderecos;
	}

	*//**
	 * @return the telefones
	 *//*
	public Set<Telefone> getTelefones() {
		if (Util.isEmpty(pessoaFisica.getId())) {
			return telefones;
		}
		else {
			return pessoaFisica.getTelefones();
		}
		
	}

	*//**
	 * @param telefones the telefones to set
	 *//*
	public void setTelefones(List<Telefone> telefones) {
		this.telefones = telefones;
	}

	*//**
	 * lista todas os objetos {@link PessoaFisica}
	 * @return {@link List}<{@link PessoaFisica}>
	 *//*
	public Set<PessoaFisica> listarPessoas() {
		return pessoaFisicaServiceBeanLocal.recuperarTodasAsPessoas();
	}*/
}
